<?php

require_once 'BancoDeDados.php';
require_once 'EspacoCultural.php';

class Observacao {

    private $cod_observacao;
    private $data_hora;
    private $texto;
    private $espaco;

    public function &getCod_observacao() {
        return $this->cod_observacao;
    }

    public function setCod_observacao(&$cod_observacao) {
        $this->cod_observacao = &$cod_observacao;
    }

    public function &getData_hora() {
        return $this->data_hora;
    }

    public function setData_hora(&$data_hora) {
        $this->data_hora = &$data_hora;
    }

    public function &getTexto() {
        return $this->texto;
    }

    public function setTexto(&$texto) {
        $this->texto = &$texto;
    }

    /**
     *
     * @return EspacoCultural
     */
    public function &getEspaco() {
        return $this->texto;
    }

    public function setEspaco(EspacoCultural &$espaco) {
        $this->espaco = &$espaco;
    }

    public function cadastrar() {
        $banco = BancoDeDados::getInstance();
        $link = $banco->getLink();
        $stmt = $link->prepare('insert into observacao (data_hora, texto, cod_espaco) values(?,?,?)');
        $result = $link->execute($stmt, array($this->data_hora, $this->texto, $this->espaco->getCod_espaco()));
        if (DB::isError($result)) {
            $link->rollBack();
            throw new Exception("Standard Message: {$result->getMessage()}<br>Standard Code: {$result->getCode()}<br>DBMS/User Message: {$result->getUserInfo()}<br>DBMS/Debug Message: {$result->getDebugInfo()}");
        }
        $link->commit();
    }

    public function alterarCampo(&$campo_id, &$campo_valor) {
        if ($campo_id == 'texto' && $this->texto != $campo_valor) {
            $temp = &$this->texto;
            $this->texto = &$campo_valor;
        } else {
            throw new Exception('no_action');
        }
        $banco = BancoDeDados::getInstance();
        $link = $banco->getLink();
        $stmt = $link->prepare('update observacao set ' . $campo_id . ' = ? where cod_observacao = ?');
        $result = $link->execute($stmt, array($campo_valor, $this->cod_observacao));
        if (DB::isError($result)) {
            $link->rollBack();
            throw new Exception("Standard Message: {$result->getMessage()}<br>Standard Code: {$result->getCode()}<br>DBMS/User Message: {$result->getUserInfo()}<br>DBMS/Debug Message: {$result->getDebugInfo()}" . " |" . $temp);
        }
        $link->commit();
    }

    public function excluir() {
        $banco = BancoDeDados::getInstance();
        $link = $banco->getLink();
        $stmt = $link->prepare('delete from observacao where cod_observacao = ?');
        $result = $link->execute($stmt, array($this->cod_observacao));
        if (DB::isError($result)) {
            $link->rollBack();
            throw new Exception("Standard Message: {$result->getMessage()}<br>Standard Code: {$result->getCode()}<br>DBMS/User Message: {$result->getUserInfo()}<br>DBMS/Debug Message: {$result->getDebugInfo()}");
        }
        $link->commit();
    }

    public static function &listar(&$cod_espaco) {
        $banco = BancoDeDados::getInstance();
        $result = $banco->getLink()->query('select * from observacao where cod_espaco = ? order by data_hora', array($cod_espaco));
        if (DB::isError($result)) {
            throw new Exception("Standard Message: {$result->getMessage()}<br>Standard Code: {$result->getCode()}<br>DBMS/User Message: {$result->getUserInfo()}<br>DBMS/Debug Message: {$result->getDebugInfo()}");
        }
        $resultado = array();
        while ($result->fetchInto($row)) {
            $observacao = new Observacao();
            $observacao->setCod_observacao($row['cod_observacao']);
            $observacao->setData_hora($row['data_hora']);
            $observacao->setTexto($row['texto']);
            $resultado[] = &$observacao;
            unset($observacao);
        }
        return $resultado;
    }

    /**
     *
     * @param integer $cod_observacao
     * @return Observacao 
     */
    public static function &consultar(&$cod_observacao) {
        $banco = BancoDeDados::getInstance();
        $result = $banco->getLink()->query('select * from observacao where cod_observacao = ? order by data_hora', array($cod_observacao));
        if (DB::isError($result)) {
            throw new Exception("Standard Message: {$result->getMessage()}<br>Standard Code: {$result->getCode()}<br>DBMS/User Message: {$result->getUserInfo()}<br>DBMS/Debug Message: {$result->getDebugInfo()}");
        }
        if ($result->numRows() == 0) {
            throw new Exception("Observação inexistente");
        } elseif ($result->numRows() > 1) {
            throw new Exception("Mais de uma Observação com o mesmo identificador, informe ao administrador");
        }
        $result->fetchInto($row);
        $observacao = new Observacao();
        $observacao->setCod_observacao($row['cod_observacao']);
        $observacao->setData_hora($row['data_hora']);
        $observacao->setTexto($row['texto']);
        return $observacao;
    }

}

?>
